package com.chen.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 根据时间生成不重复对话编号
 * 使用redis incr命令递增编号，可用于分布式编号生成
 * TODO: 适用于各种不重复编号设计，比如订单编号
 */
@Slf4j
@Component
public class DiaLogNumberGenerator {

    @Autowired
    private CacheUtils cacheUtils;

    // 时间格式
    private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("yyyyMMddHH");

    public String generateDialogNumber() {

        LocalDateTime now = LocalDateTime.now();
        String timestamp = DATE_FORMAT.format(now);
        int value = cacheUtils.incr(timestamp).intValue();
        //设置key过期时间为一个小时
        cacheUtils.expire(timestamp,1, TimeUnit.HOURS);
        //value不足100000，前面补0，如果超过100000，则保持原样。真能一个小时生成10w对话，我也起飞了
        String count = String.format("%06d", value);
        return timestamp + count;
    }
}